<?php
class BlogController extends Slog_Controller 
{
	public function publicList()
	{
		// Obtenemos variables de paginación
		//$page = isset($_GET['page']) ? intval($_GET['page']) : 0;
		$page = $this->getParam('page', 0);
		$limit = 10; // 10 artículos por página
		$start = $page * $limit;

		// Obtenemos los artículos de la base de datos ordenados de más nuevo a más antiguo
		$posts = new SloggyPosts();
		// URL a cada artículo
		$P = $posts->getPaginateList($start, $limit);
		foreach (array_keys($P) as $idx) {
			$P[$idx]->url = 'http://' . Slog::request()->getHost() . $this->view->link('blog','view','id', $P[$idx]->id); 
		}
		$this->view->posts = $P;
		
		//	- variables de paginación
		$this->view->page = $page;
		

		Slog::response()->setTitle('Listado de artículos | sloggy');		
	}
	
	public function publicView()
	{
		$id = $this->getParam('id', 0);
		
		$posts = new SloggyPosts();
		$comments = new SloggyComments();
		
		$post = $posts->getById($id);
		if ($post) {
			$this->view->comments = $comments->getByPostId($post->id);
		}
		$this->view->post = $post;
		
		// Guardamos los datos en la vista
		//	- Ponemos título a la página
		Slog::response()->setTitle($post->title);
		
		$this->view->allowed_tags = '<p><br><a><img><b><i><strong>';
		
		// Respuesta del envío de comentario
		$this->view->comment_info = Slog::session()->comment_info;
		unset(Slog::session()->comment_info);		
	}
	
	public function publicComment()
	{
		if (isset($_POST['nick']) && isset($_POST['email']) && isset($_POST['body'])) {
			$nick = strip_tags(trim($_POST['nick']));
			$email = strip_tags(trim($_POST['email']));
			$web = strip_tags(trim($_POST['web']));
			$body = nl2br(strip_tags(trim($_POST['body']), $this->allowed_tags));
		
			$id_post = intval($_POST['id_post']);
			$date = time();
			
			// Campos requeridos
			if (empty($nick)) {
				$comment_message = 'Debes poner un nombre.';
			}
			if (empty($email)) {
				$comment_message = 'Debes poner tu email (no será publicado).';
			}
			if (empty($body)) {
				$comment_message = 'Debes poner algo en el comentario';
			}
			
			// Se añade el comentario
			if (!$comment_message) {
				$comments = new SloggyComments();
				$comments->saveData(array(
					'name'		=> $comment_name,
					'email'		=> $comment_email,
					'web'		=> $comment_web,
					'content'	=> $comment_content,
					'id_post'	=> $id_post,
				));
				$id_comment = $db->query($sql);
				header('Location: ?p=' . $id_post . '#comment_' . $id_comment);
			} else {
				$_SESSION['comment_info'] = array(
					'message'	=> $comment_message,
					'nick'		=> $nick,
					'email'		=> $email,
					'web'		=> $web,
					'body'		=> $body
				);
				header('Location: ?p=' . $id_post . '#comments');
			}
			exit();
		}
	}
	
	public function privateEdit()
	{
		// Si el usuario no está autentificado, redirigimos
		if (!Slog_User::logged()) {
			$this->redirect('user/login');
		}
		// Si el usuario no es editor o administrador, redirigimos
		if (!Slog_User::isRol(array('editor','admin'))) {
			$this->redirect('error/not-authorized');
		}
		
		// Obtenemos el id_post a editar (0: nuevo)
		$id_post = isset($_GET['id']) ? intval($_GET['id']) : 0;
		
		// Obtenemos datos del post
		if ($id_post) {
			$sql = "
				SELECT posts.*, users.nick
				FROM slog_posts posts
				JOIN slog_users users ON (users.id_user = posts.id_user)
				WHERE id_post = $id_post
			";
			$post = $db->fetch($sql);
		} else {
			$post = array(
				'id_post'	=> 0,
				'title'		=> 'Nuevo artículo',
				'body'		=> ''
			);
		}
		
		// Tags permitidos
		$this->allowed_tags = '<p><b><i><strong><a><img><ul><ol><li><pre><code>';
		
		
		// Si estamos recibiendo datos del formulario de edición, guardamos los datos
		if (isset($_POST['title']) && isset($_POST['body'])) {
			$title = trim(strip_tags($_POST['title']));
			$body = trim(nl2br(strip_tags($_POST['body'], $this->allowed_tags)));
			$post_id_post = intval($_POST['id_post']);
			
			// Creamos SQL para guardar datos
			if ($post_id_post == 0) {
				// Nuevo post
				$date = time();
				$id_user = intval($_SESSION['user']['id_user']);
				$sql = "
					INSERT INTO slog_posts (id_user, title, body, date)
					VALUES ($id_user, '$title', '$body', $date)
				";
				$id_post = $db->query($sql);
			} else {
				// Edición
				if ($id_post == $post_id_post) {
					$sql = "
						UPDATE slog_posts
						SET title='$title', body='$body'
						WHERE id_post=$id_post
					";
					$db->query($sql);
				}
			}
			
			// Redirigimos a la vista del artículo
			header('Location: ?p=' . $id_post);
			exit();
		}
		
		// Guardamos los datos en la vista
		//	- Ponemos t�tulo a la página
		$this->title = 'Edición de ' . $post['title'] . ' | ' . $this->title;
		//	- Guardamos el post
		$this->post = $post;
		
	}
}